home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: Alpha / Whiteline Alpha.iso / progtool / modula2 / drucker / lpr / drucktre.txt < prev    next >
Encoding:
Text File  |  1994-09-22  |  11.3 KB  |  231 lines

  1.  
  2.     Modula-2-Modul DruckTreiberV2.0
  3.     ===============================
  4.  
  5.  
  6.  
  7. Das Kleingedruckte:
  8.  
  9.      Dieses Modula-2-Modul ist Public Domain, d.h. es darf zu privaten Zwecken 
  10.      von jedermann verwendet und frei kopiert werden.  Dabei müssen immer alle 
  11.      dazugehörigen Dateien weitergegeben  werden:  DRUCKTRE.DEF,  .MOD,  .DOC, 
  12.      CFGINSTA.PRG,  .DOC  und  LQ_15_OE.HEX.  Die  Freigabe  zur  gewerblichen 
  13.      Nutzung behalte ich mir vor.
  14.  
  15.      Die .DEF und .MOD Dateien wurden mit dem LPR-Modula-2-System Version  1.4 
  16.      übersetzt.  Wer  eine andere Version oder ein anderes System benutzt  muß 
  17.      die Module neu übersetzen.
  18.  
  19.      Wenn jemand Änderungen (hoffentlich Verbesserungen) im Programmtext  vor-
  20.      nimmt,  darf  die Copyright-Zeile mit meinem Namen u.  Adresse nicht  ge-
  21.      löscht werden. Außerdem bitte ich darum, daß mir die Verbesserungen zuge-
  22.      schickt  werden.  Ich bezeichne mich nicht als unfehlbar und bin  deshalb 
  23.      dankbar,  wenn ich auf Unzulänglichkeiten oder Fehler des Programms  auf-
  24.      merksam gemacht werde. Danke.
  25.  
  26.      Hier meine Adresse:      Uwe Ischebeck
  27.                               Ringstr. 31
  28.                               D-6900 Heidelberg
  29.  
  30.      Ein  Aufruf,  bei  mir einen Obulus für die Nutzung des Moduls  oder  des 
  31.      Install-Programms abzuliefern folgt hier nicht.  Ich hasse sowas. Nur wer 
  32.      erwartet,  daß ich ihm etwas zuschicke,  sollte mir einen  entsprechenden 
  33.      Freiumschlag und, falls notwendig eine Diskette zuschicken.
  34.  
  35.      Und jetzt zur Sache:
  36.  
  37.  
  38. Anleitung zum M2-Modul DruckTreiber:
  39.  
  40. Dieses Modul entstand aus einer ganz einfachen Überlegung.  Ich tausche  meine 
  41. selbstgeschriebenen  Programme gerne mit anderen ST-Besitzern.  Da aber  nicht 
  42. alle den gleichen Drucker haben wie ich,  und die meisten von denen auch nicht 
  43. voll Epson-kompatibel sind, mußte ein druckerunabhängiges Ausgabemodul her.
  44.  
  45. 1stWordPlus bietet dazu eine recht komfortable Möglichkeit an,  indem es  nach 
  46. Programmstart  eine CFG-Datei einliest,  in der viele Druckfunktionen und  die 
  47. Zeichenanpassung stehen.  Außerdem ist diese Textverarbeitung eine der  meist-
  48. verbreiteten auf dem ST. Die meisten Benutzer werden deshalb eine oder mehrere 
  49. auf ihren Drucker zugeschnittene Anpassungen haben.  Und wer keine  hat,  kann 
  50. sich mit dem mitgelieferten Programm CfgInstall eine Anpassung schneidern. Den 
  51. Aufbau der dafür notwendigen .HEX-Datei kann man der untenstehenden  Beschrei-
  52. bung entnehmen.
  53.  
  54. Die   meisten  modernen  Drucker  sind  wesentlich  intelligenter,   als   von 
  55. 1stWordPlus angenommen wird.  Außerdem sind die grafischen Fähigkeiten  dieser 
  56. Textverarbeitung eher mäßig bis schlecht,  sodaß hier noch ein paar  Erweiter-
  57. ungen für einen brauchbaren Druckertreiber notwendig sind.
  58.  
  59. Und  um  die Erweiterungen auch in eine CFG-Datei zu packen  mußte  ein  neues 
  60. Installprogramm geschrieben werden.  So wurde die Zahl der Druckfunktionen auf 
  61. 40hex erweitert. Auch können jetzt bis zu 253 Bytes für eine Funktion oder ein 
  62. Zeichen kodiert werden.  Da eine Zeile in den meisten Edtitoren nicht so  lang 
  63. werden  darf,  sind jetzt auch Fortsetzungszeilen erlaubt,  die in der  ersten 
  64. Spalte  einen  Bindestrich (2Dhex) enthalten.  WordPlus stört sich  an  diesen 
  65. Änderungen wenig,  nur das GST-Installprogramm machte bisher diese Einschränk-
  66. ungen.  Allerdings habe ich nicht ausprobiert,  wie groß die CFG-Datei  werden 
  67. darf,  damit  WordPlus noch damit fertig wird (bis 2kByte funktioniert es  auf 
  68. jeden Fall).  Mit dem alten Install hätte eine CFG-Datei bis zu 11kBytes  groß 
  69. werden  können,  sodaß es also auch bis zu dieser Größe keine  Probleme  geben 
  70. dürfte  (hoffentlich  hat  GST daran gedacht).  Die Größe  der  CFG-Datei  bei 
  71. CfgInstall ist auf 16kBytes begrenzt. Größer gehts sicher auch, allerdings ist 
  72. der Programmieraufwand dafür ungleich größer,  was mich dazu bewogen hat,  die 
  73. Finger davon zu lassen.
  74.  
  75. Im  DruckTreiber-Modul habe ich die Größe der CFG-Datei auf 2kBytes  begrenzt, 
  76. was  aber bequem bis maximal 16kB vergrößert werden kann,  indem man "a"  in 
  77. TDruckSteuer entsprechend anpasst ([0..16383]).
  78.  
  79. Die  Funktion des Moduls beruht auf der Struktur TDruckSteuer,  die  über  die 
  80. importierbare  Variable  S  angesprochen  wird.  Die  Variable  hat  folgendes 
  81. Aussehen:
  82.  
  83. TYPE TDruckSteuer = RECORD
  84.                       d : String; (* ARRAY[0..79] OF CHAR, Name 
  85.                          der CFG-Datei, wird von Config dort hin kopiert *)
  86.                       filehandle : INTEGER; (* GEMDOS-Handle, auf 
  87.                          diesen Kanal werden die Daten ausgegeben *)
  88.                       geladen,     (* Flag, ob Treiber geladen *)
  89.                       LQ: BOOLEAN; (* Flag für LQ-Schrift      *)
  90.                       ersatz : CHAR (* Dieses Zeichen wird gedruckt, wenn ein 
  91.                         nicht verfügbares Zeichen im Druckertreiber ankommt *)
  92.                       n : StringPoiter; (* Zeiger auf den Namen der Druckeran-
  93.                          passung, Ende der Zeichenkette durch 0hex markiert *)
  94.                       par : ARRAY[0..5] OF CHAR; (* 6 Konfigurationsvariablen,
  95.                          in der HEX-Datei beschrieben. *)
  96.                       c : ARRAY[0..MaxFunc] OF INTEGER; (* Funktionentabelle*)
  97.                       z : ARRAY[0..255] OF INTEGER; (* Zeichentabelle *)
  98.                       a : ARRAY[0..2047] OF CHAR; (* Hier stehen die 
  99.                          eigentlichen Daten des Treibers wie sie aus der Datei 
  100.                          *.CFG gelesen werden. Die Felder c und z enthalten 
  101.                          lediglich einen Zeiger auf untenstehende Struktur im 
  102.                          Feld a *)
  103.                     END;
  104. VAR S : TDruckSteuer;
  105.  
  106. Die Struktur, auf die c[i] und z[i] im Feld a zeigen:
  107.   RECORD
  108.     len : BYTE; (* Länge der Funktion/Zeichenkette incl. len und num *)
  109.     num : BYTE; (* Nummer der Funktion/des Zeichens *)
  110.     c   : ARRAY[2..len] OF CHAR; (* diese Zeichenkette wird im Endeffekt an 
  111.                                     den Drucker geschickt *)
  112.   END;
  113.  
  114. Die Struktur wird über S.a[c[i]] angesprochen. Wer's noch genauer wissen will, 
  115. schaut bitte im Programmtext nach.
  116.  
  117. Die  meisten Funktionen des Moduls sind in der  .DEF-Datei  beschrieben.  Hier 
  118. soll trotzdem kurz auf ein paar eingegangen werden:
  119.  
  120. SetLQ(TRUE/FALSE):
  121.      Setzt  oder  löscht das LQ-Flag in S.  Wird bei  gesetztem  LQ-Flag  eine 
  122.      Funktion zu Ausgabe von "Kursivschrift an" o.ä.  angesprochen,  wird  die 
  123.      für  LQ  notwendige Funktion aufgerufen,  sonst die  für  Schnellschrift. 
  124.      Deshalb kann man die Ausgabe immer mit den Funktionen für  Schnellschrift 
  125.      programmieren und bei Bedarf das LQ-Flag setzen.
  126.  
  127. PrintHandle(handle):
  128.      Alle  Druckerausgaben  werden mit einem  GEMDOS.-Write(handle...)  ausge-
  129.      führt.  Der Ausgabekanal "handle" kann mit dieser Prozedur neu festgelegt 
  130.      werden.
  131.  
  132. PrintDirekt...( ):  Diese  Prozeduren  schicken die übergebenen  Zeichen  bzw. 
  133.                     Bytes  direkt,  d.h.  ohne Umwandlung an den  Ausgabekanal 
  134.                     (wichtig für Grafiken).
  135.  
  136. PrintChar( ),
  137. PrintString( ):     Hier  übergebene Zeichen werden gemäß der  Zeichenüberset-
  138.                     zungstabelle der CFG-Datei umgewandelt und an den Ausgabe-
  139.                     kanal geschickt.
  140.  
  141. PrintSteuer(nr,wert):
  142.      Wenn in der Druckeranpassung die Funktion "nr" vorgesehen ist, wird diese 
  143.      mit allen notwendigen Codes an den Drucker gesendet.  Für Funktionen, die 
  144.      einen  Parameter  benötigen,  z.B.  "horizontaler  Sprung  an  Spalte  x" 
  145.      (horizontal  TAB) wird der "wert" mit in den  Steuerstrom  eingebaut.  Da 
  146.      "wert" eine Integervariable ist,  1stWordPlus aber nur mit BYTE-Variablen 
  147.      arbeitet,  muß bei den von der Textverarbeitung bekannten Funktionen  ein 
  148.      Wert  zwischen  0 und 255 übergeben werden.  Bei den  Funktionen  in  der 
  149.      Erweiterung unterliegt dieser Parameter keinen Einschränkungen.
  150.  
  151. Als Schmankerl ist noch eine weitere Prozedur eingebaut:
  152. PrintString4(s0,s1,s2,s3,string):
  153.      Diese Prozedur soll eine Menge Programmierarbeit ersparen.  Mit s0 bis s3 
  154.      werden  Steuerfunktionen aufgerufen.  Ein Wert kleiner 0 wird  ignoriert. 
  155.      Benötigt eine dieser Funktionen einen Parameter  (s.  PrintSteuer),  dann 
  156.      wird  der  folgende  Wert als Parameter  übergeben.  Bei  s3  klappt  das 
  157.      natürlich  nicht,  deshalb wird s3 in so einem Fall ignoriert.  Sind  die 
  158.      Funktionen ausgeführt wird der "string" mit PrintString(string)  ausgege-
  159.      ben. Ein Beispiel:
  160.  
  161.           TAB zu Spalte 15,Unterstreichen an, Fettdruck an
  162.           Tabellenüberschrift "Jahresübersicht"
  163.           Neue Zeile, Fettdruck aus, Tab zu Spalte 18
  164.           Untertitel "für 1988"
  165.           Neue Zeile, Unterstrichen aus
  166.      wird Programmiert als:
  167.           PrintString4(5,15,1AH,6,"Jahresübersicht");
  168.           PrintString4(1,7,5,18,"für 1988");
  169.           PrintString4(1,1BH,-1,-1,"");
  170.  
  171.      Über  die  Bedeutung  der  übergebenen  Parameter  gibt  die 
  172.      Beschreibung zum HEX-Format Auskunft.
  173.  
  174.  
  175. Beschreibung des Formats der .HEX-Datei:
  176.  
  177. Es  handelt  sich  um  eine  Textdatei,   die  keinerlei  Formatierungszeichen 
  178. enthalten  darf.  Außerdem werden außer für den Namen und die  Kommentare  nur 
  179. Hexadezimalzahlen  verwendet,  die  durch Komma oder  Leerzeichen  voneinander 
  180. getrennt sind. 
  181.  
  182. In  der  1.(interpretierbaren) Zeile steht der Name  der  Anpassung  (Wordplus 
  183. zeigt diesen Namen zusammen mit der Tabelle der definierten Zeichen an).
  184.  
  185. In  der 2.Zeile stehen 6 Hexzahlen,  die WordPlus für verschiedene  Funktionen 
  186. benötigt, wichtig für Typenraddrucker.
  187.  
  188. Danach folgen die Druckersteuerfunktionen. Jede Zeile hat folgenden Aufbau:
  189.      Nummer  der  Funktion,  danach  bis zu 253 Hexzahlen die  direkt  an  den 
  190.           Drucker  geschickt  werden.  Codes  80 und 81  werden  wie  oben  in 
  191.           PrintSteuer  beschrieben  durch einen aktuellen  Wert  vom  Programm 
  192.           ersetzt.  Zeichen hinter einem * werden als Kommentar betrachtet und 
  193.           ignoriert.
  194.           Manche Druckerfunktionen benötigen einen Parameter aus dem Programm. 
  195.           dafür  wird in der Tabelle eine 80 (für das niederwertige Byte)  und 
  196.           81 (für das hochwertige Byte) eingesetzt.  Die Funktionen 1 bis  33h 
  197.           bearbeiten  nur  das niederwertige Byte,  81 darf  nicht  eingesetzt 
  198.           werden.
  199. Die Tabelle der Druckerfunktionen wird mit einer Zeile beendet, die nur eine 0 
  200. enthält.
  201.  
  202. Darauf  folgt  die Übersetzungstabelle für den Zeichensatz.  Sie  ist  genauso 
  203. aufgebaut  wie  die  Funktionstabelle  und wird auch mit  einer  Zeile  mit  0 
  204. beendet.
  205.  
  206. Folgende Erweiterungen wurden in die Funktionstabelle eingebaut:
  207.  
  208. 34 * Buchstaben doppelter Höhe an
  209. 35 *                           aus
  210. 36 * Prportionalschrift an
  211. 37 * Proportionalschrift aus
  212. 38 * Textstellung linksbündig
  213. 39 *              zentriert
  214. 3A *              rechtsbündig
  215. 3B *              Blocksatz
  216. 3C * Starte 8-Nadelgrafik,   60 DPI
  217. 3D * Starte 8-Nadelgrafik,  120 DPI
  218. 3E * Starte 24-Nadelgrafik, 120 DPI
  219. 3F * Starte 24-Nadelgrafik, 360 DPI
  220. * 40    * Bisher nicht belegt
  221.  
  222. Grundsätzlich ist es egal,  wie die Steuerfunktionen belegt werden.  Wenn aber 
  223. jeder seine eigene Aufteilung vornimmt, ist es aus mit dem Programmtausch.
  224.  
  225. Ein Beispiel steht in der Datei LQ_15_OE.HEX.
  226.  
  227.  
  228.  
  229.  
  230. Viel Spaß beim Hacken!
  231.